package com.bjc.feign.fallback;

import com.bjc.domain.Product;
import com.bjc.feign.ProductFeignClient;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * @program: spring-cloud-alibaba
 * @description: 如果想在容错类中拿到具体的错误, 可以使用下面的方式
 * @author: bjc
 * @create: 2021-08-04 22:33
 */
@Service
@Slf4j
//这是容错类，他要求我们实现一个FallbackFactory<要为哪个接口产生容错类>
public class ProductServiceFallbackFactory implements FallbackFactory<ProductFeignClient> {

    /**
     * Throwable 这就是feign在调用过程中产生的异常
     * @param throwable
     * @return
     */
    @Override
    public ProductFeignClient create(Throwable throwable) {
        return new ProductFeignClient() {
            @Override
            public Product findByPid(Integer pid) {
                log.error("{}",throwable);
                //容错逻辑
                Product product = new Product();
                product.setPid(-100);
                product.setPname("远程调用商品服务出现异常，进入了容错逻辑");
                return product;
            }
        };
    }
}
